package com.remote.server.controller;

import lombok.Builder;
import lombok.Data;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;

@Builder
@Data
public class Admin {
    private Integer id;
    private String name;
    private Integer age;
    private Integer sex;
    private  Integer sours;


    public static void main(String[] args) {
        ArrayList<Admin> list = new ArrayList<>();
        Admin admin = Admin.builder()
                .id(1)
                .name("张三")
                .age(16)
                .sex(1)
                .sours(80)
                .build();
        list.add(admin);

        Admin admin1 = Admin
                .builder()
                .id(2)
                .name("李四")
                .age(18)
                .sex(1)
                .sours(80)
                .build();
        list.add(admin1);

        Admin admin2 = Admin
                .builder()
                .id(3)
                .name("王五")
                .age(23)
                .sex(1)
                .sours(80)
                .build();
        list.add(admin2);

        Admin admin3 = Admin
                .builder()
                .id(4)
                .name("赵六")
                .age(21)
                .sex(1)
                .sours(80)
                .build();
        list.add(admin3);

        Admin admin4 = Admin
                .builder()
                .id(5)
                .name("田七")
                .age(15)
                .sex(1)
                .sours(80)
                .build();
        list.add(admin4);

        Admin admin5 = Admin
                .builder()
                .id(6)
                .name("龙傲天")
                .age(17)
                .sex(1)
                .sours(80)
                .build();
        list.add(admin5);


        //get方法,取值
        System.out.println(list.stream()
                //判断方法
                .filter(s -> 3 == s.getId())
                //随机返回一个结果
                .findAny()
                //取值
                .get());


        System.out.println(list.stream()
                .filter(s -> 3 == s.getId())
                .findAny()
                //作用类似于if else
                .orElse(null));

        list.stream()
                .filter(s-> 3 == s.getId())
                .findAny()
                //判断对象是否存在 ,返回的是一个boolean值
                .isPresent();

        System.out.println(list.stream()
                //判断名称为张三的
                .filter(s -> "张三".equals(s.getName()))
                //获取到这个id
                .mapToInt(s -> s.getId())
                //求和
                .sum());

        String aaa = "We Are Tream";
        List<String> list1 = new ArrayList<>();
        list1.add(aaa);

        System.out.println(list1);

        System.out.println(list1.stream()
                //内容合并                //用一个空格的字符串来切割数据
                .flatMap(s -> Stream.of(s.split(" ")))
                //判断,如果这个字符串里的值长度大于0就把这个值放到一个List的集合里面
                .filter(aa -> aa.length() > 0)
                .collect(Collectors.toList()));


        Random random = new Random();
        random.ints().limit(3).forEach(System.out::println);

        for (int i = 0; i < 4; i++) {
            Admin admin6 = new Admin(i, "name" + i, i, i, i);
            list.add(admin6);
        }

        System.out.println(list.stream()
                //把数据转换成map类型的,取出名称
                .map(Admin::getName)
                //这里的limit代表取前三个值
                .limit(3)
                //skip这个方法代表了跳过的意思,这一句表示跳过前两个字符串
                .skip(2)
                //把数据放到List集合中
                .collect(Collectors.toList()));

        //limit方法和skip方法会影响集合中的值,所以最后只输出了一个值

        System.out.println("-------------------------------------");

        list.stream()
                .map(Admin::getName)
                .limit(3)
                .skip(2)
                .forEach(System.out::println);

        System.out.println("------------正序排序------------");

        System.out.println(list.stream()
                //sorted 方法是正序排序,跟据age字段
                .sorted(Comparator.comparing(Admin::getAge))
                //把结果放到一个集合中
                .collect(Collectors.toList()));

        System.out.println("----------倒序排序----------");

        System.out.println(list.stream()
                //根据age字段排序
                .sorted(Comparator.comparing(Admin::getAge)
                        //这个方法代表倒叙
                        .reversed())
                //把值放到一个集合中
                .collect(Collectors.toList()));

        System.out.println("---------多字段排序--------");

        System.out.println(list.stream()
                .sorted(Comparator.comparing(Admin::getAge, Comparator.nullsLast(Integer::compareTo))
                        .thenComparing(Admin::getSex)
                        .reversed())
                .collect(Collectors.toList())+"😶");

        ConcurrentHashMap<Integer,String> conMap = new ConcurrentHashMap<>();
        conMap.put(1,"zhangsan");
        conMap.put(2,"lisi");

        ArrayList<String> strings = new ArrayList<String>(conMap.values());

        for (String string : strings) {
            System.out.println(string+"😶");
        }

    }
}
